package com.qf.day14;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

/**
 * 1.把文本文件中的ip地址去重  然后打印出来
 * 统计一个文本文件的ip地址的出现次数（ip地址格式为192.168.10.39,每行智能存放一个ip地址）
 */
public class HashmapDemo {
    public static void main(String[] args) {
        Set<String> uniqueIps = new HashSet<>();
        try (BufferedReader reader = new BufferedReader(new FileReader("F:\\QD2306JAVA\\02-javabasic\\code\\java2306\\src\\com\\qf\\day14\\ip.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                // 去除行首尾的空格，并将连续的空格替换为一个空格
                String trimmedLine = line.trim().replaceAll("\\s+", " ");
                // 假设每行只有一个IP地址，直接添加到集合中
                if (!trimmedLine.isEmpty() && isValidIp(trimmedLine.split(" ")[0])) {
                    uniqueIps.add(trimmedLine.split(" ")[0]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 打印去重后的IP地址
        for (String ip : uniqueIps) {
            System.out.println(ip);
        }
    }
    // 检查字符串是否为有效的IPv4地址
    private static boolean isValidIp(String ip) {
        String IPADDRESS_PATTERN =
                "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";

        return ip.matches(IPADDRESS_PATTERN);
    }
}
